/* 
 * SIT, Sistema Integral de Tramites del Ministerio de Minas y Energia
 * Copyright 2010, como se indica en  los tags @author. Revise
 * el archivo  copyright.txt en la lista de desarrollo 
 * 
 * Este NO es un software libre y no puede ser redistribuido y/o modificado
 * bajo ningun termino. El codigo es propietario y solo  puede
 * ser utilizado bajo permiso explicito del Ministerio de Minas y Energia
 * 
 * Este Software no es distribuido publicamente y solo deberia estar
 * ejecutandose en el entorno de desarrollo del Ministerio de Minas y Energia,
 * si por alguna razon este codigo se ejecuta en un entorno diferente estaria 
 * violando la ley de derechos de autor que lo proteje., Al igual que cualquier 
 * uso  del codigo o cualquiera de los componentes del sistema
 * sin autorizacion explicita de los autores.
 * 
 * Si necesita autorizacion para la utilizacion del codigo o parte de el 
 * por favor refierase a la lista de desarrollo del proyecto para contactar 
 * al autor indicado en el tag @author, o comuniquese con 
 * el grupo de arquitectura de software del proyecto.
 */
package co.edu.udistrital.database.dao.impl;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo;
import org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor;

/**
 * This merges all JPA entities from multiple jars. To use it, all entities must
 * be listed in their respective persistence.xml files using the <class> tag.
 * 
 * @see http://forum.springsource.org/showthread.php?t=61763
 * 
 */
public class MergingPersistenceUnitPostProcessor implements PersistenceUnitPostProcessor {
	
	/** Maneja las clases obtenidas por unidad de persistencia. */
	private final transient Map<String, Set<String>> puiClasses = new HashMap<String, Set<String>>();

	/* (non-Javadoc)
	 * @see org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor#postProcessPersistenceUnitInfo(org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo)
	 */
	@Override
	public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) {
		Set<String> classes = puiClasses.get(pui.getPersistenceUnitName());
		if (classes == null) {
			classes = new HashSet<String>();
			puiClasses.put(pui.getPersistenceUnitName(), classes);
		}
		pui.getManagedClassNames().addAll(classes);
		classes.addAll(pui.getManagedClassNames());
	}
}